allAnyway.js ➔ ... ➔ ???   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
c 2
b 0
f 0
nc 1
nop 2
dl 0
loc 11
rs 9.4285
1
"use strict";
2
3
/**
4
 * @param {Array<callback>} callbackList
5
 *
6
 * @returns {Promise<Object>} Return a promise resolved even if one or more callbacks have failed
7
 *                            Resolved value is an object containing resolvedList and rejectedList
8
 *                            - resolvedList will contains successful callback returned value ordered by callback index
9
 *                            - rejectedList will contains rejected callback error ordered by callback index
10
 */
11
module.exports = (callbackList) => {
12
    const final = {
13
        resolvedList: [],
14
        rejectedList: []
15
    };
16
17
    if (callbackList.length === 0) {
18
        return Promise.resolve(final);
19
    }
20
21
    const mapCallback = (callback, index) => {
22
        return new Promise(resolve => {
23
            try {
24
                final.resolvedList[index] = callback();
25
                resolve();
26
            } catch (e) {
27
                final.rejectedList[index] = e;
28
                resolve();
29
            }
30
        });
31
    };
32
33
    return Promise.all(callbackList.map(mapCallback))
34
        .then(() => final);
35
};
36